home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Day Cry
/
Day Cry CD.bin
/
oh_towns
/
taropyon
/
splib
/
splib.lzh
/
PRG
/
LHX
/
LIST.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-12-08
|
3KB
|
130 lines
/***********************************************************
list.c -- list files in archive
***********************************************************/
#include "lh386.h"
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "lh.h"
#ifdef __HIGHC__
# pragma On(Align_labels);
#endif
static int filecount;
static long originalsize, packedsize;
void initlist(void)
{
filecount = originalsize = packedsize = 0;
if (flg_n == 0)
{
LHX_printf(" Name Original Packed Ratio"
" Date Time Attr Type CRC\n");
LHX_printf("-------------- -------- -------- ------"
" -------- -------- ---- ----- ----\n");
}
}
static void expanddate(char *buf, time_t t, ulong org, ulong pac)
{
struct tm *tm;
int rt;
tm = localtime(&t);
rt = ratio(pac, org, 3);
sprintf(buf + 14, "%10lu%10lu %3d.%1d%% "
"%02d/%02d/%02d %02d:%02d:%02d",
org, pac, rt / 10, rt % 10,
tm->tm_year % 100,
tm->tm_mon + 1,
tm->tm_mday,
tm->tm_hour,
tm->tm_min,
tm->tm_sec);
}
void list(void)
{
char buf[79], *p, *q;
static char attr[7] = "ohs--a";
int i, j, k;
p = hpb.filename;
q = hpb.pathname;
if (flg_n == 0)
{
memset(buf, ' ', 14);
expanddate(buf, hpb.utc, hpb.original, hpb.packed);
sprintf(buf + 59, " ---w %04X", hpb.filecrc);
memcpy(&buf[65], hpb.method, 5);
for (i = 0, j = 1; i < 6; i++, j <<= 1)
{ /* attributes */
if (hpb.attr & j)
{
k = attr[i];
if (i <= 2)
{
buf[63 - i] = k;
} else
{
buf[60] = k;
}
}
}
if (hpb.level < 0)
{
memset(&buf[71], '*', 4); /* if no CRC supported */
}
if (flg_x)
{
LHX_puts(q); /* display in 2 lines */
LHX_puts("\r\n");
} else
{
if (p != q)
{ /* display in one line */
*buf = '+';
}
memcpy(&buf[2], p, strlen(p));
}
LHX_puts(buf);
LHX_puts("\r\n");
filecount++;
originalsize += hpb.original;
packedsize += hpb.packed;
} else
{
if (flg_x)
{
LHX_puts(q);
} else
{
LHX_puts(p);
}
LHX_puts("\r\n");
}
}
void endlist(time_t arctime)
{
char buf[79];
if (flg_n == 0)
{
if (filecount)
{
LHX_printf("-------------- -------- -------- ------"
" -------- --------\n");
sprintf(buf, " %3d files ", filecount);
expanddate(buf, arctime, originalsize, packedsize);
LHX_puts(buf);
} else
{
LHX_printf(" no file\n");
}
}
}